import os
from dotenv import load_dotenv
from loguru import logger

# 获取项目根目录路径（src 的上级目录）
def get_project_root():
    """获取项目根目录路径"""
    current_dir = os.path.dirname(os.path.abspath(__file__))
    return os.path.dirname(current_dir)

# 加载 .env 文件（优先从项目根目录加载）
project_root = get_project_root()
env_path = os.path.join(project_root, '.env')

# 尝试从项目根目录加载 .env 文件
if os.path.exists(env_path):
    load_dotenv(env_path)
    logger.info(f"从项目根目录加载 .env 文件: {env_path}")
else:
    # 如果项目根目录没有 .env 文件，尝试从当前目录加载
    load_dotenv()
    logger.info("从当前工作目录加载 .env 文件")

class EnvConfig:
    """环境变量配置管理类"""
    
    @staticmethod
    def get_mysql_host():
        """获取 MySQL 主机地址"""
        return os.getenv('MYSQL_HOST', '127.0.0.1')
    
    @staticmethod
    def get_mysql_user():
        """获取 MySQL 用户名"""
        return os.getenv('MYSQL_USER', 'root')
    
    @staticmethod
    def get_mysql_password():
        """获取 MySQL 密码"""
        return os.getenv('MYSQL_PSW', '123456')
    
    @staticmethod
    def get_mysql_db():
        """获取 MySQL 数据库名"""
        return os.getenv('MYSQL_DB', 'by3')
    
    @staticmethod
    def get_mysql_db_cache():
        """获取 MySQL 缓存数据库名"""
        return os.getenv('MYSQL_DB_CACHE', 'by3_caches')
    
    @staticmethod
    def get_api_key():
        """获取 Binance API Key"""
        return os.getenv('API_KEY', 'OLZXM3Bd93383TBFsfhmz4QHYp7GooBcUeXoy7GsFdbMhUyKHr1tg8Etpoj9CdoH')
    
    @staticmethod
    def get_api_secret():
        """获取 Binance API Secret"""
        return os.getenv('API_SECRET', 'ixZvBLc0eoekUmbq6vFzsR8VJayMhYkg3aGWMvwDVPHN4o1SSFSUpqAryMGFS5hG')
    
    @staticmethod
    def get_is_testnet():
        """获取是否使用测试网络"""
        return os.getenv('IS_TESTNET', 'False').lower() == 'true'
    
    @staticmethod
    def get_symbol():
        """获取交易对符号"""
        return os.getenv('SYMBOL', 'BTCFDUSD')
    
    @staticmethod
    def get_clone_name():
        """获取克隆名称"""
        return os.getenv('CLONE_NAME', 'clone_d')
    
    @staticmethod
    def get_log_rotation_size():
        """获取日志轮转大小"""
        return os.getenv('LOG_ROTATION_SIZE', '500 MB')
    
    @classmethod
    def validate_config(cls):
        """验证配置是否完整"""
        required_configs = [
            ('MYSQL_HOST', cls.get_mysql_host()),
            ('MYSQL_USER', cls.get_mysql_user()),
            ('MYSQL_PSW', cls.get_mysql_password()),
            ('API_KEY', cls.get_api_key()),
            ('API_SECRET', cls.get_api_secret()),
        ]
        
        missing_configs = []
        for name, value in required_configs:
            if not value:
                missing_configs.append(name)
        
        if missing_configs:
            logger.warning(f"以下配置项为空，将使用默认值: {missing_configs}")
        
        return True 